#!/bin/bash
# 设置一些函数和变量
# 定义进度条字符
if printf '%b' '\u2588' 2>/dev/null | grep -q '█'; then # 尝试在屏幕上打印, 如果打印结果不符合预期, 就屏蔽可能的错误, 将进度条设置为可读的 #
   block_char='█'
else
   block_char='#'
fi

# 定义进度条函数
show_progress() { # show_progress(progress, total, message)
   	local progress=$1 # 当前进度
   	local total=$2 # 总进度
   	local message=$3 # 项目名字

	# 检查总进度是否大于零
	if [ "$total" -eq 0 ]; then
		echo "Error: Total value is zero. Cannot compute progress!"
       	return
	fi

	# 检查当前进度是否大于总进度
	if [ "$progress" -gt "$total" ]; then
		echo "Error: Progress value ($progress) exceeds total value ($total)!"
       	return
	fi

   	local width=50 # 进度长度

   	local percent=$(( (progress * 100) / total )) # 计算进度百分比
   	local filled=$(( (progress * width) / total )) # 计算已填充进度条的长度
   	local empty=$(( width - filled )) # 计算未填充进度条的长度

   	printf "\r" # 打印项目名字
	tput el # 清空当前光标位置到行尾的内容
	printf "["
   	printf "%0.s$block_char" $(seq 1 $filled) # seq 1 $filled 将会生成一个从 1 到 $filled 的序列, printf 会将 $block_char 按照 $(seq 1 $filled) 的数量重复打印出来, 从而形成进度条的填充部分
   
   	if [ "$progress" -ne "$total" ]; then # 这里的 if 主要解决进度条末尾多出的空白字符问题
      	printf "%0.s " $(seq 1 $empty) # 这里就是把进度条的空白部分连续打印出来
   	fi
   
   	printf "] %d%%: %s" $percent "$message" # 打印进度条百分比

   	if [ "$progress" -eq "$total" ]; then # 这里的 if 主要是解决进度条打印完毕后命令提示符无法换行的问题
      	printf "\n"
   	fi
}

# 定义一些全局变量
script_name="${BASH_SOURCE[0]}" # 获取脚本的文件名
total_lines=$(wc -l < "$script_name") # 获取脚本的总行数

# 开始启动本地初始化
show_progress $LINENO $total_lines "Initialize the system in linux..."
sleep 1


# 设置个人文件夹
show_progress $LINENO $total_lines "Set up a personal folder..."
mkdir -p ~/git
mkdir -p ~/tools
mkdir -p ~/web
mkdir -p ~/test
mkdir -p ~/other
mkdir -p ~/resource/video
mkdir -p ~/resource/picture
mkdir -p ~/resource/file
sleep 1


# 设置包管理器
show_progress $LINENO $total_lines "Set the package manager..."
if [ -f /etc/centos-release ]; then # 系统是 CentOS
    package_manager="yum"
elif [ -f /etc/lsb-release ]; then # 系统是 Ubuntu
    package_manager="apt-get"
else
	# ... 待处理
    exit 1
fi
# 这里待编写...
sleep 1


# git 仓库的拉取
show_progress $LINENO $total_lines "Set up and clone the local repository..."
show_progress $LINENO $total_lines "OK"